
package com.jf.cloud.supplier.mapper;

import com.jf.cloud.api.supplier.bo.SupplierDetailBO;
import com.jf.cloud.api.supplier.bo.SupplierSimpleBO;
import com.jf.cloud.api.supplier.vo.SupplierApiDetailVO;
import com.jf.cloud.supplier.dto.SupplierDetailDTO;
import com.jf.cloud.supplier.model.SupplierDetail;
import com.jf.cloud.supplier.vo.SupplierDetailAppVO;
import com.jf.cloud.supplier.vo.SupplierDetailVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 供应商详情
 *
 * @author zz
 * @date 2022-03-14 17:04:32
 */
public interface SupplierDetailMapper {

    /**
     * 获取店铺详情列表
     *
     * @param supplierDetailDTO 店铺搜索数据
     * @return 店铺详情列表
     */
    List<SupplierApiDetailVO> list(@Param("supplierDetail") SupplierDetailDTO supplierDetailDTO);

    /**
     * 根据店铺详情id获取店铺详情
     *
     * @param supplierId 店铺详情id
     * @return 店铺详情
     */
    SupplierApiDetailVO getBySupplierId(@Param("supplierId") Long supplierId);

    /**
     * 保存店铺详情
     *
     * @param supplierDetail 店铺详情
     */
    void save(@Param("supplierDetail") SupplierDetail supplierDetail);

    /**
     * 更新店铺详情
     *
     * @param supplierDetail 店铺详情
     */
    void update(@Param("supplierDetail") SupplierDetail supplierDetail);

    /**
     * 根据店铺详情id删除店铺详情
     *
     * @param supplierId
     */
    void deleteById(@Param("supplierId") Long supplierId);

    /**
     * 根据店铺id列表，获取店铺信息
     *
     * @param supplierIds 店铺id列表
     * @return 店铺列表
     */
    List<SupplierDetail> listBySupplierIds(@Param("supplierIds") List<Long> supplierIds);

    /**
     * 根据店铺id获取店铺详情
     *
     * @param supplierId 店铺详情id
     * @return 店铺详情
     */
    SupplierApiDetailVO getSupplierBySupplierId(Long supplierId);

    /**
     * 店铺搜索列表
     *
     * @param supplierDetailDTO
     * @return
     */
    List<SupplierDetailAppVO> supplierSearchList(@Param("supplierDetail") SupplierDetailDTO supplierDetailDTO);

    /**
     * 统计该店铺名被其他用户使用的数量
     *
     * @param supplierName
     * @param supplierId
     * @return
     */
    int countSupplierName(@Param("supplierName") String supplierName, @Param("supplierId") Long supplierId);

    /**
     * 改变店铺状态
     *
     * @param supplierId
     * @param supplierStatus
     */
    void changeSupplierStatus(@Param("supplierId") Long supplierId, @Param("supplierStatus") Integer supplierStatus);

    /**
     * 获取店铺信息及扩展信息
     *
     * @param supplierId
     * @return
     */
    SupplierDetailBO supplierExtensionData(@Param("supplierId") Long supplierId);

    /**
     * 获取店铺信息及扩展信息
     *
     * @param supplierIds  供应商ids
     * @param supplierName 供应商名称
     * @return 店铺信息列表
     */
    List<SupplierApiDetailVO> getSupplierDetailBySupplierIdAndSupplierName(@Param("supplierIds") List<Long> supplierIds, @Param("supplierName") String supplierName);

    /**
     * 根据店铺id获取店铺扩展信息
     *
     * @param supplierId 店铺id
     * @return 店铺扩展信息
     */
    SupplierApiDetailVO getShoExtensionsBySupplierId(Long supplierId);

    /**
     * 根据手机号获取存在店铺的数量
     *
     * @param mobile 手机号
     * @return 数量
     */
    Integer countByMobile(String mobile);

    /**
     * 根据店铺状态查询店铺数量
     *
     * @param supplierStatus
     * @return
     */
    Long countBySupplierStatus(@Param("supplierStatus") Long supplierStatus);

    /**
     * 根据签约时间修改店铺状态
     *
     * @param now
     */
    void changeSupplierStatusByContractTime(@Param("now") Date now);

    /**
     * 获取状态需要改变的店铺id列表
     *
     * @param now
     * @return
     */
    List<Long> listSupplierIdsOfStatusChangeByContractTime(@Param("now") Date now);

    /**
     * 根据当前时间获取状态需要改变为停业状态的店铺id列表
     *
     * @param now
     * @return
     */
    List<Long> listSupplierIdsOfStatusChangeToStopByContractTime(@Param("now") Date now);

    /**
     * 根据当前时间获取状态需要改变为营业状态的店铺id列表
     *
     * @param now
     * @return
     */
    List<Long> listSupplierIdsOfStatusChangeToOpenByContractTime(@Param("now") Date now);


    /**
     * 根据参数获取店铺id列表
     *
     * @param supplierSimpleBO
     * @return
     */
    List<SupplierSimpleBO> listSimple(@Param("supplierSimpleBO") SupplierSimpleBO supplierSimpleBO);

    /**
     * 根据店铺状态获取店铺id列表
     *
     * @param supplierStatus
     * @return
     */
    List<Long> getSupplierIdsBySupplierStatus(@Param("supplierStatus") Integer supplierStatus);

    /**
     * 供应商列表
     *
     * @param supplierDetailDTO
     * @param supplierIds
     * @return 供应商列表
     */
    List<SupplierDetailVO> listSupplierDetail(@Param("supplier") SupplierDetailDTO supplierDetailDTO, @Param("supplierIds") List<Long> supplierIds);

    /**
     * 获取指定供应商信息
     *
     * @param supplierIds
     * @return
     */
    List<SupplierApiDetailVO> listSupplierDetailBySupplierIds(@Param("supplierIds") List<Long> supplierIds);
}
